//
//  UITextView+Keyboard.swift
//  表情键盘新工程-74.准备
//
//  Created by itcast on 16/5/24.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit

extension UITextView {
    
    /// 获取textView的带表情名称内容
    func emoticonNameText() -> String {
        // 获取表情图片对应名称
        
        var resultString = ""
        // 分段保存,文字一段,emoji一段,图片一段(NSAttachment)
        //        print("attributedText: \(textView.attributedText)")
        // 遍历textView.attributedText的每一段,拼接起来
        self.attributedText.enumerateAttributesInRange(NSRange(location: 0, length: self.attributedText.length), options: NSAttributedStringEnumerationOptions(rawValue: 0)) { (info, range, _) -> Void in
//            print("info: \(info)")
//            print("range: \(range)")
//            print("--------")
            // 判断是否是附件
            if let attachment = info["NSAttachment"] as? CZTextAttachment {
                // 附件
                resultString += attachment.chs!
                // 获取名称
            } else {
                // 文字, emoji
                // 截取
                let text = (self.attributedText.string as NSString).substringWithRange(range)
                resultString += text
            }
        }
        
        return resultString
    }
    
    /**
     将模型对应的内容添加到textView上面
     
     - parameter emoitconModel: 模型
     */
    func insertEmoticon(emoticonModel: CZEmoticonModel) {
        // 添加emoji表情
        if let emoji = emoticonModel.emoji {
            self.insertText(emoji)
        } else {
            // 图片
            // 1.附件
            let attachment = CZTextAttachment()
            
            // 2.附件设置图片
            attachment.image = UIImage(named: emoticonModel.fullPngPath!)
            let wh = self.font!.lineHeight * 0.85
            // 2.1设置附件的大小
            attachment.bounds = CGRect(x: 0, y: -3, width: wh, height: wh)
            // 2.2设置附件的名称
            attachment.chs = emoticonModel.chs
            
            // 3.将附件转成属性文本
            let imageAttr = NSMutableAttributedString(attributedString: NSAttributedString(attachment: attachment))
            // 3.1附件缺少文本属性,在后面的附件都会变得很小
            imageAttr.addAttribute(NSFontAttributeName, value: self.font!, range: NSRange(location: 0, length: 1))
            
            // 3.1获取之前的内容
            let beforeAttr = NSMutableAttributedString(attributedString: self.attributedText)
            
            // 3.2 获取textView选中的范围
            let textSelectedRange = self.selectedRange
            // 3.3将带附件的属性文本替换到之前的内容里面来
            beforeAttr.replaceCharactersInRange(textSelectedRange, withAttributedString: imageAttr)
            
            // 4.将设置后的属性文本赋值回来
            self.attributedText = beforeAttr
            
            // 4.1设置光标位置
            self.selectedRange = NSRange(location: textSelectedRange.location + 1, length: 0)
            
            // 系统不会触发文字改变的通知和调用代理方法
            delegate?.textViewDidChange?(self)
            NSNotificationCenter.defaultCenter().postNotificationName(UITextViewTextDidChangeNotification, object: self)
        }
    }
}
